#ifndef DEVICE_H
#define DEVICE_H

#include <QString>
#include <QDateTime>

/**
 * @brief 设备实体类
 * @details 对应数据库 devices 表
 */
class Device
{
public:
    Device();
    Device(const QString &deviceId, const QString &deviceName, const QString &ipAddress);

    // Getter 方法
    QString deviceId() const { return m_deviceId; }
    QString deviceName() const { return m_deviceName; }
    QString ipAddress() const { return m_ipAddress; }
    int port() const { return m_port; }
    int slaveId() const { return m_slaveId; }
    QString status() const { return m_status; }
    QDateTime lastUpdate() const { return m_lastUpdate; }
    QDateTime createdAt() const { return m_createdAt; }
    QString description() const { return m_description; }

    // Setter 方法
    void setDeviceId(const QString &deviceId) { m_deviceId = deviceId; }
    void setDeviceName(const QString &deviceName) { m_deviceName = deviceName; }
    void setIpAddress(const QString &ipAddress) { m_ipAddress = ipAddress; }
    void setPort(int port) { m_port = port; }
    void setSlaveId(int slaveId) { m_slaveId = slaveId; }
    void setStatus(const QString &status) { m_status = status; }
    void setLastUpdate(const QDateTime &lastUpdate) { m_lastUpdate = lastUpdate; }
    void setCreatedAt(const QDateTime &createdAt) { m_createdAt = createdAt; }
    void setDescription(const QString &description) { m_description = description; }

    // 工具方法
    bool isOnline() const { return m_status == "online"; }
    bool isValid() const { return !m_deviceId.isEmpty() && !m_ipAddress.isEmpty(); }

private:
    QString m_deviceId;     // 设备唯一标识（如：PLC_01）
    QString m_deviceName;   // 设备名称（如：1号生产线PLC）
    QString m_ipAddress;    // 设备 IP 地址
    int m_port;             // Modbus TCP 端口（默认 502）
    int m_slaveId;          // Modbus 从站地址（1-247）
    QString m_status;       // 设备状态：online/offline/error
    QDateTime m_lastUpdate; // 最后一次数据更新时间
    QDateTime m_createdAt;  // 设备添加时间
    QString m_description;  // 设备描述信息
};

#endif // DEVICE_H
